perm filename MACROS.LSP[MRS,LSP] blob
sn#702098 filedate 1983-03-18 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 -*- Mode:LISP -*-
C00009 00003
C00019 00004
C00020 00005
C00021 ENDMK
C⊗;
;;; -*- Mode:LISP; -*- ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Please do not modify this file. See MRG. ;;;
;;; (c) Copyright 1981 Michael R. Genesereth ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#-lispm (eval-when (compile) (macros t))
#+franz (eval-when (eval load) (sstatus uctolc t))
(eval-when (compile load eval)
#+maclisp (setsyntax '@ 'macro 'tyi)
(comment
#+maclisp
(setsyntax '/< 'macro
'(lambda () (cond ((= @ (tyipeek)) '|<|)
((= @= (tyipeek)) (tyi) '|<=|)
)))
#+maclisp
(setsyntax '/> 'macro
'(lambda () (cond ((not (= @= (tyipeek))) '/>)
(t (tyi) '|>=|))))
)
) ;end of eval-when
(defun local macro (x)
(do ((l (cadr x) (cdr l)) (nl) (vl))
((null l)
(setq vl (nreverse vl) nl (nreverse nl))
`((lambda ,vl . ,(cddr x)) . ,nl))
(cond ((atom (car l)) (setq vl (cons (car l) vl) nl (cons nil nl)))
(t (setq vl (cons (caar l) vl) nl (cons (cadar l) nl))))))
;unused
;(defun mrg-values macro (x)
; (do ((l (cdr x) (cdr l)) (i 1 (1+ i)) (nl))
; ((null l) `(setq . ,(nreverse nl)))
; (setq nl (cons (car l)
; (cons (implode (nconc (exploden 'reg) (exploden i)))
; nl)))))
;unused
;(defun setqs macro (x)
; (do ((l (cadr x) (cdr l)) (i 1 (1+ i)) (nl))
; ((null l) `(if ,(caddr x) (setq . ,(nreverse nl))))
; (setq nl (cons (implode (nconc (exploden 'reg) (exploden i)))
; (cons (car l) nl)))))
(defun mapand macro (x)
`(do ((l ,(caddr x) (cdr l))) ((null l) t)
(ifn (funcall ,(cadr x) (car l)) (return nil))))
;unused
;(defun mapand2 macro (x)
; `(do ((l ,(caddr x) (cdr l)) (m ,(cadddr x) (cdr m)))
; ((or (null l) (null m))
; (eq l m))
; (ifn (funcall ,(cadr x) (car l) (car m)) (return nil))))
(defun mapor macro (x)
`(do ((l ,(caddr x) (cdr l)) (dum)) ((null l))
(if (setq dum (funcall ,(cadr x) (car l))) (return dum))))
(defun maplac macro (x)
`(do l ,(caddr x) (cdr l) (null l) (rplaca l (,(cadr x) (car l)))))
#-lispm
(defun when macro (x) `(cond ,(cdr x)))
#-lispm
(defun if macro (x)
(cond ((null (cdddr x)) `(cond (,(cadr x) ,(caddr x))))
(t `(cond (,(cadr x) ,(caddr x)) (t . ,(cdddr x))))))
(defun ifn macro (x)
(cond ((null (cdddr x)) `(cond ((not ,(cadr x)) ,(caddr x))))
(t `(cond ((not ,(cadr x)) ,(caddr x)) (t . ,(cdddr x))))))
(defun put macro (x) `(putprop . ,(cdr x)))
(defun iand macro (x) `(boole 1 . ,(cdr x)))
(defun ior macro (x) `(boole 7 . ,(cdr x)))
(defun xor macro (x) `(not (eq . ,(cdr x))))
;(defun copy macro (x) `(subst nil nil ,(cadr x)))
(defun copyp macro (x) `(cons (car ,(cadr x)) (cdr ,(cadr x))))
(defun copyl macro (x) `(append ,(cadr x) nil))
#-lispm
(defun >= macro (x) `(not (< ,(cadr x) ,(caddr x))))
#-lispm
(defun <= macro (x) `(not (> ,(cadr x) ,(caddr x))))
;unused
;(defun econs macro (x) `(append ,(cadr x) (list ,(caddr x))))
#-franz(defun caaadar macro (x) `(caaadr (car ,(cadr x))))
#-franz(defun caaaddr macro (x) `(caaadr (cdr ,(cadr x))))
#-franz(defun caadaar macro (x) `(caadar (car ,(cadr x))))
#-franz(defun caadadr macro (x) `(caadar (cdr ,(cadr x))))
#-franz(defun caaddar macro (x) `(caaddr (car ,(cadr x))))
#-franz(defun cadaaar macro (x) `(cadaar (car ,(cadr x))))
#-franz(defun cadaddr macro (x) `(cadadr (cdr ,(cadr x))))
#-franz(defun caddaar macro (x) `(caddar (car ,(cadr x))))
#-franz(defun caddadr macro (x) `(caddar (cdr ,(cadr x))))
#-franz(defun cadddar macro (x) `(cadddr (car ,(cadr x))))
#-franz(defun caddddr macro (x) `(cadddr (cdr ,(cadr x))))
#-franz(defun cdadadr macro (x) `(cdadar (cdr ,(cadr x))))
#-franz(defun cdadddr macro (x) `(cdaddr (cdr ,(cadr x))))
#-franz(defun cdddddr macro (x) `(cddddr (cdr ,(cadr x))))
#-lispm(defun aset macro (x) `(store ,(cddr x) ,(cadr x)))
#-lispm(defun aref macro (x) (cdr x))
;(declare (special name bas mobjects mrg-selector) (*expr mode))
;
;(setq mobjects nil)
;
;(defprop mode (c-mode s-mode a-mode) mode)
;
;(defun c-mode macro (x) `(list . ,(cdr x)))
;
;(defun s-mode macro (x)
; (cond ((eq 'c (caddr x)) `(car ,(cadr x)))
; ((eq 'sel (caddr x)) `(cadr ,(cadr x)))
; ((eq '← (caddr x)) `(caddr ,(cadr x)))))
;
;(defun a-mode macro (x)
; (cond ((eq 'c (caddr x)) `(rplaca (cadr x) ,(cadddr x)))
; ((eq 'sel (caddr x)) `(rplaca (cdr ,(cadr x)) ,(cadddr x)))
; ((eq '← (caddr x)) `(rplaca (cddr ,(cadr x)) ,(cadddr x)))))
;
;
;
;(defun defmode macro (x)
; (let ((mrg-selector (memq 'mrg-selector (cddddr x))))
; (define-mode (cadr x) (cadddr x))
; (mapc 'eval (cddddr x))
; `',(cadr x)))
;
;(defun define-mode (name desc)
; (prog (c s a dummy)
; (setq dummy (explodec name)
; c (implode (append '(c -) dummy))
; s (implode (append '(s -) dummy))
; a (implode (append '(a -) dummy)))
; (define-macro c (defc desc))
; (define-macro s (defs desc))
; (define-macro a (defa desc))
; (put name (c-mode c s a) 'mode)
; (return name)))
;
;
;(defun defc (desc) (let ((bas 'x)) `(lambda (x) ,(defc1 desc))))
;
;(defun defc1 (desc)
; (cond ((atom desc) (list 'quote desc))
; ((eq 'mrg-selector (car desc))
; (cond ((not (null (cdddr desc))) (list 'quote (cadddr desc)))
; (t (setq bas (list 'cdr bas))
; (list 'car bas))))
; ((eq 'atom (car desc))
; `(list 'c-atom '',(mapcar 'cadr (cdr desc)) (cons 'list (cdr x))))
; ((eq 'cons (car desc)) `(list 'cons ,(defc1 (cadr desc)) ,(defc1 (caddr desc))))
; ((eq 'list (car desc))
; (do ((l (cdr desc) (cdr l)) (nl))
; ((null l) `(list 'list . ,(nreverse nl)))
; (setq nl (cons (defc1 (car l)) nl))))
; ((eq 'struct (car desc)) (defc1 (cons 'list (cdr desc))))
; (t (list 'quote desc))))
;
;
;(defun defs (desc)
; `(lambda (x) (cond . ,(nreverse (defs1 desc '(cadr x) nil)))))
;
;(defun defs1 (desc bas result)
; (cond ((atom desc) result)
; ((eq 'mrg-selector (car desc))
; (put (cadr desc) (cons (cons name (caddr desc)) (get (cadr desc) 'modes)) 'modes)
; (put name (cons (cons (cadr desc) (caddr desc)) (get name 'sels)) 'sels)
; (if mrg-selector (define-macro (cadr desc) 'mrg-selector))
; (cons `((eq ',(cadr desc) (caddr x)) ,bas) result))
; ((eq 'atom (car desc))
; (do l (cdr desc) (cdr l) (null l)
; (put (cadar l) (cons (cons name (caddar l)) (get (cadar l) 'modes)) 'modes)
; (put name (cons (cons (cadar l) (caddar l)) (get name 'sels)) 'sels)
; (if mrg-selector (define-macro (cadar l) 'mrg-selector)))
; (cons `((memq (caddr x) ',(mapcar 'cadr (cdr desc))) (list 'get ,bas (list 'quote (caddr x))))
; result))
; ((eq 'cons (car desc))
; (setq result (defs1 (cadr desc) `(list 'car ,bas) result))
; (defs1 (caddr desc) `(list 'cdr ,bas) result))
; ((eq 'list (car desc))
; (do l (cdr desc) (cdr l) (null l)
; (setq result (defs1 (car l) `(list 'car ,bas) result)
; bas `(list 'cdr ,bas)))
; result)
; ((eq 'struct (car desc)) (defs1 (cons 'list (cdr desc)) bas result))
; (t result)))
;
;(defun defa (desc)
; `(lambda (x) (cond . ,(nreverse (defa1 desc '(cadr x) nil nil)))))
;
;(defun defa1 (desc bas cdr result)
; (cond ((atom desc) result)
; ((eq 'mrg-selector (car desc))
; (setq bas (cond ((not cdr) `(list 'car (list 'rplaca ,(caddr bas) (cadddr x))))
; (t `(list 'cdr (list 'rplacd ,(caddr bas) (cadddr x))))))
; (cons `((eq ',(cadr desc) (caddr x)) ,bas) result))
; ((eq 'atom (car desc))
; (list `(t (list 'a-atom (cadr x) (list 'quote (caddr x)) (cadddr x)))))
; ((eq 'cons (car desc))
; (setq result (defa1 (cadr desc) `(list 'car ,bas) nil result))
; (defa1 (caddr desc) `(list 'cdr ,bas) t result))
; ((eq 'list (car desc))
; (do l (cdr desc) (cdr l) (null l)
; (setq result (defa1 (car l) `(list 'car ,bas) nil result)
; bas `(list 'cdr ,bas)))
; result)
; ((eq 'struct (car desc)) (defa1 (cons 'list (cdr desc)) bas cdr result))
; (t result)))
;
;
;(defun define-macro (name lambda-exp) (put name lambda-exp 'macro))
;
;(defun mode (x) (cdr (assoc x mobjects)))
;
;(defun modedeclare fexpr (x)
; (mapc '(lambda (l) (mapc '(lambda (v) (setq mobjects (cons (cons v (car l)) mobjects)))
; (cdr l)))
; x))
;
;(defun ndm-err (x)
; (terpri)
; (princ '|cannot determine the mode of |) (princ x)
; (err))
;
;(defun nsm-err (x)
; (terpri)
; (princ '|no such mode as |) (princ x)
; (err))
;
;(defun sel-err (b s)
; (terpri)
; (princ '|:|) (princ b)
; (do () ((null s)) (princ '|:|) (princ (car s)) (setq s (cdr s)))
; (princ '|is an impossible selection|)
; (err))
;
;(defun ia-err (x)
; (terpri)
; (princ '|cannot assign |) (princ x)
; (err))
;
;
;(defun sel macro (x)
; (local ((s (fsel (mode (cadr x)) (cddr x))))
; (cond ((null s) (sel-err (cadr x) (cddr x)))
; (t (setq x (cadr x))
; (do () ((null (cdr s)) x)
; (setq x (cons (cadr (get (car s) 'mode)) (rplaca s x)) s (cddr s))
; (rplacd (cddr x) nil))))))
;
;(defun fsel (m sels) ; this has a bug in it.
; (cond ((null sels) (list m))
; ((null m)
; (do l (get (car sels) 'modes) (cdr l) (null l)
; (if (setq m (fsel (cdar l) (cdr sels)))
; (return (cons (caar l) (cons (car sels) m))))))
; ((local (dum)
; (if (setq dum (assq (car sels) (get m 'sels)))
; (cons m (cons (car sels) (fsel (cdr dum) (cdr sels)))))))
; (t (do ((l (get m 'sels) (cdr l)) (dum)) ((null l))
; (if (setq dum (fsel (cdar l) sels))
; (return (cons m (cons (caar l) dum))))))))
;
;(defun mrg-selector (x)
; (if (null (cddr x)) `(sel ,(cadr x) ,(car x))
; `(← (sel ,(cadr x) ,(car x)) ,(caddr x))))
;
;
;(defun ← macro (x) `(sto . ,(cdr x)))
;
;(defun sto macro (x)
; (do ((l (cdr x) (cddr l)) (s) (nl))
; ((null l) `(progn . ,(nreverse nl)))
; (cond ((atom (car l)) (setq nl (cons `(setq ,(car l) ,(cadr l)) nl)))
; ((and (eq 'sel (caar l)) (setq s (fsel (mode (cadar l)) (cddar l))))
; (setq x (cadar l))
; (do l (cddr s) (cddr l) (null (cdr l))
; (setq x (cons (cadr (get (car l) 'mode)) (rplaca l x)))
; (rplacd (cddr x) nil))
; (setq nl (cons (list (caddr (get (car s) 'mode)) x (cadr s) (cadr l)) nl)))
; (t (ia-err (car l))))))
;(defun c-atom (sels args)
; (do ((nl)) ((null sels) (rplacd (intern (gensym)) (nreverse nl)))
; (if (car args) (setq nl (cons (car args) (cons (car sels) nl))))
; (setq sels (cdr sels) args (cdr args))))
;(defun a-atom (bas sel val)
; (cond ((null val) (remprop bas sel) nil)
; (t (putprop bas val sel))))
;(defun dssq (x l)
; (do () ((null l))
; (cond ((eq x (cdar l)) (return (car l))) (t (setq l (cdr l))))))
(defun impvar macro (x) `(special . ,(cdr x)))
(defun expvar macro (x) `(special . ,(cdr x)))
(defun impfun macro (x) `(*expr . ,(cdr x)))
(defun expfun macro (x) `nil)
#+franz
(defmacro list* (first &rest rest)
(if rest `(cons ,first (list* ,@ rest))
first))
;moved from match and bc
(defun pset macro (x) `(cons (cons ,(cadr x) ,(caddr x)) ,(cadddr x)))